home *** CD-ROM | disk | FTP | other *** search
/ CD/PC Actual 9 / CDACTUAL9.iso / share / Dos / VARIOS / pascal / SCREEN.SWG / 0001_Saving and Restoring Text Screens.pas
Encoding:
Pascal/Delphi Source File  |  1996-02-21  |  1.9 KB  |  80 lines

  1. {
  2. In artice <DE6swr.6CK@postoffice.ptd.net>, NUKE@postoffice.ptd.net wrote:
  3.  > How do I read text from the screen (ascii/ansi) so that I can put it back up
  4.  > later (ex...to display a help menu then replace area where menu was with
  5.  > original text)???    Thanks in advance.
  6.  
  7. Here it is:
  8.  
  9. TYPE TScreenBuffer = Array[1..20004] of Byte;
  10.      PScreenBuffer = ^TScreenBuffer;
  11. }
  12.  
  13. FUNCTION SBASE;
  14. BEGIN
  15.      Sbase:=SegB800;
  16.      IF ScrMode  = 7 THEN sbase:=Segb000;
  17. END;
  18.  
  19. FUNCTION StoreScrPart(X1,Y1,X2,Y2:Byte):PScreenBuffer;
  20. VAR Hlp  : Word;
  21.     I,J  : Integer;
  22.     Sb   : Word;
  23.     Buff : PScreenBuffer;
  24. BEGIN
  25.      hlp:=4+(((Y2-Y1)+1)*((X2-X1)+1))*2;
  26.      IF ( MaxAvail> hlp ) THEN
  27.      BEGIN
  28.           Getmem(Buff,Hlp);
  29.           Buff^[1]:=X1;
  30.           Buff^[2]:=X2;
  31.           Buff^[3]:=Y1;
  32.           Buff^[4]:=Y2;
  33.           Sb:=Sbase;
  34.           For I := X1 to X2 do
  35.               For J := Y1 to Y2 Do
  36.                   Move(ptr(sb,(I-1)*2+(J-1)*160)^,Buff^[5+((I-X1)+(J-Y1)*(X2-X1+1))*2],2);
  37.           StoreScrPart:=Buff;
  38.      END
  39.      ELSE StoreScrPart:=NIL;
  40. END;
  41.  
  42. PROCEDURE RestoreScrPart(P:PScreenBuffer);
  43. VAR Hlp         : Word;
  44.     I,J         : Integer;
  45.     x1,y1,x2,y2 : Byte;
  46.     Sb          : Word;
  47. BEGIN
  48.      IF P = NIL THEN EXIT;
  49.      x1:=P^[1];
  50.      X2:=P^[2];
  51.      Y1:=P^[3];
  52.      Y2:=P^[4];
  53.      Hlp:=4+(((Y2-Y1)+1)*((X2-X1)+1))*2;
  54.      Sb:=SBase;
  55.      For I := X1 to X2 do
  56.          For J := Y1 to Y2 Do
  57.              Move(P^[5+((I-X1)+(J-Y1)*(X2-X1+1))*2],Ptr(sb,(I-1)*2+(J-1)*160)^,2);
  58.      FreeMem(P,hlp);
  59. END;
  60.  
  61. FUNCTION ReadScr:PScreenBuffer;
  62. BEGIN
  63.      ReadScr:=StoreScrPart (1,1,AnzSpalten,AnzZeilen);
  64. END;
  65.  
  66. PROCEDURE WriteScr(P:PScreenBuffer);
  67. BEGIN
  68.      RestoreScrPart(P);
  69. END;
  70.  
  71.  
  72. Now just use
  73.   VAR P: PScreenBuffer;
  74.   BEGIN
  75.        P:=ReadScr;
  76.        ....
  77.        { write back : }
  78.        WriteScr(P);
  79.   END;
  80.